<?php

function isCnNewID($cid){

$arrExp = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);//加权因子

$arrValid = array(1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2);//校验码  

if (preg_match("/^\d{17}\d|x$/i", $cid)) {

if(!checkdate(substr($cid,10,2), substr($cid,12,2), substr($cid,6,4))){

return false; //判断日期是否合法

}

$sum = 0;

            for($i = 0; $i < (strlen($cid) - 1); $i++){

                $sum += intval(substr($cid, $i, 1), 10) * $arrExp[$i];  //完成【校验码计算】第一步加权求和

            }

            $idx = $sum % 11;//完成【校验码计算】 (2)计算模

            return $arrValid[$idx] == strtoupper(substr($cid,-1));//(3)根据模，查找得到对应的校验码，查看结果是否一致

}

else{

return false; //长度不合法，不是数字或X不合法

}

}

?>